home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
COMAL
/
Z-Misc Series
/
(k)zf.d64
/
src.rabbit
< prev
next >
Wrap
Text File
|
2007-03-01
|
25KB
|
1,646 lines
;
;--------------------------------;
; ;
; COMAL'S DISKRABBIT V.090785 ;
; ;
; MADE BY M.BOKHORST 1985 ;
; ;
; (C) 1985 BY DUTCH COMAL USERS ;
; GROUP ;
; ;
; LAST REVISON: 230386 ;
;--------------------------------;
;
;-CONSTANTS CBM -----------------;
;
PARAM =114
REAL =0
INT =1
STR =2
ARRAY =6
PROC =112
VALUE =PARAM+0
REF =PARAM+3
ENDPRC =126
ENDFNC =126
FUNC =227
;
ARG =1
FILER =201
DNP =208
CHCKSM =210
ILDEV =217
ILLO =218
;
LINK =2
DSCRD =3
BASIC =11
;
DIS =8
CR =13
LOWER =14
CLRPAG =147
SHSPC =160
;
FALSE =0
TRUE =1
;
ROMMED =%00010000
DEFPAG =%01000110
;
INDEV =8
MAX =$1D
EOF =$40
LCOM =$60
;
HIDE =$10
SKIP =$2C
;
CPEN =1
CBORD =6
CBACK =0
;
JUMP =$4C
INJUMP =$6C
;
;-CONSTANTS 1541 ----------------;
;
LED =8
REOI =$10
READ =$80
WRITE =$90
EXPRG =$E0
;
;-VARIABLES 1541 ----------------;
;
COMND =$00
COMND2 =$02
COMTRK =$06
COMSEC =$07
COMTR2 =$0A
COMSC2 =$0B
TEMP =$D5
DRIVE =$7F
TRACK =$80
SECTOR =$81
BUF0 =$99
BUFNO =$F9
DOSFLG =$0101
DOSTYP =$0102
SUBCM1 =$024D
SUBCM2 =$025B
BUFFER =$0300
DRMEM =$0500
PORT =$1800
PLED =$1C00
DIR =$FE85
DOSFRM =$FED5
MAXTRK =$FED7
;
;-ROUTINES 1541 -----------------;
;
LEDON =$C118
OKSTAT =$C1C8
INIT =$D005
EXECOM =$D466
REP1 =$E60A
REP2 =$E645
MAXSEC =$F24B
WRSYNC =$FDA3
DUMMY =$FF0F
RESET =$FFFC
;
;-KERNAL VARIABLES --------------;
;
STATUS =$90
LDTND =$98
DFLTN =$99
DFLTO =$9A
FNLEN =$B7
LA =$B8
SA =$B9
FA =$BA
FNADR =$BB
LAT =$0259
FAT =$0263
SAT =$026D
PEN =$0286
IOPEN =$031A
ICLOSE =$031C
ICHKIN =$031E
ICKOUT =$0320
ICLRCH =$0322
IBASIN =$0324
;
;-I/O CBM -----------------------;
;
VICON =$D011
RWRAST =$D012
SPCON =$D015
BORDER =$D020
BACK =$D021
CPORT =$DD00
;
;-KERNAL ROUTINES ---------------;
;
RETCR =$F1B1
DELPAR =$F2F3
FINDFI =$F30F
SFIPAR =$F31F
IO1 =$F6FB
IO2 =$F6FE
IO3 =$F701
IO4 =$F704
IO5 =$F707
IO6 =$F70A
IO7 =$F70D
IO8 =$F710
IO9 =$F713
SLIST =$FF93
TKSA =$FF96
IECIN =$FFA5
IECOUT =$FFA8
UNTALK =$FFAB
UNLIST =$FFAE
LISTEN =$FFB1
TALK =$FFB4
GETKEY =$FFE4
;
;-COMAL ROUTINES & VARIABLES ----;
;
Q1 =$3B
COPY =$45
PAGEB =$82
ERTLEN =$0200
ERTEXT =$0201
TRAPVC =$C7DE
MODET =$C80E
NOREST =$C841
DFBORD =$C850
DFBACK =$C851
DFFORG =$C852
ACBORD =$C853
ACBACK =$C854
GOTO =$C884
FNDPAR =$C896
PSHINT =$C9CE
RUNERR =$C9FB
CWRT =$CA06
EMPTY =$CA2F
CSTAT =$CEA7
;
;-RABBIT ZERO PAGE VARIABLES ----;
;
SAVE =$55
FROM =$FB
TO =$FD
;
;-RABBIT NON ZERO PAGE VARIABLES ;
;
VARBAS =$C000
;
UBUF =VARBAS
OLDOPN =UBUF+256
OLDCLS =OLDOPN+2
OLDCHK =OLDCLS+2
OLDOUT =OLDCHK+2
OLDCLR =OLDOUT+2
OLDBAS =OLDCLR+2
OLDTRP =OLDBAS+2
XSAVE =OLDTRP+2
YSAVE =XSAVE+1
TYPE =YSAVE+1
MODE =TYPE+1
INSTAL =MODE+1
FAST =INSTAL+1
CHKING =FAST+1
CHARD =CHKING+1
PTSAVE =CHARD+1
SPRITE =PTSAVE+1
DEV =SPRITE+1
FLOFF =DEV+1
WHERR =FLOFF+1
BLMODE =WHERR+1
BUFED =BLMODE+1
;
;-MODULE START ------------------;
;
*=$7000
;
;--------------------------------;
;
.MAC ADD
LDA ?1
CLC
ADC #<?2
STA ?1
LDA ?1+1
ADC #>?2
STA ?1+1
.MND
;
;---------------------------------
;
PAGE
.BYTE DEFPAG
.WORD END
.WORD SIGNAL
;
.BYTE 6,'RABBIT'
.WORD PRTAB
.WORD EMPTY
.BYTE 0
;
PRTAB
;
.BYTE 5,'BREAD'
.WORD HREAD
.BYTE 6,'BWRITE'
.WORD HWRITE
.BYTE 8,'SETBMODE'
.WORD HTRANS
.BYTE 7,'SETFAST'
.WORD HFAST
.BYTE 9,'SETROMMED'
.WORD HROM
.BYTE 9,'SETDEVICE'
.WORD HSDEV
.BYTE 10,'SETOFFTEST'
.WORD HSOFF
.BYTE 6,'DEVICE'
.WORD HDEV
.BYTE 5,'TRACK'
.WORD HTRACK
.BYTE 6,'SECTOR'
.WORD HSECT
.BYTE 4,'FAST'
.WORD HFFAST
.BYTE 6,'ROMMED'
.WORD HFROM
.BYTE 7,'OFFTEST'
.WORD HOFF
.BYTE 5,'RDERR'
.WORD HRDERR
.BYTE 9,'BLOCKMODE'
.WORD HBMOD
.BYTE 0
;
HREAD
.BYTE PROC,<BGET,>BGET,4
.BYTE VALUE+INT,VALUE+INT
.BYTE VALUE+INT,REF+STR
.BYTE ENDPRC
HWRITE
.BYTE PROC,<BPUT,>BPUT,4
.BYTE VALUE+INT,VALUE+INT
.BYTE VALUE+INT,REF+STR
.BYTE ENDPRC
HFAST
.BYTE PROC,<SFST,>SFST,1
.BYTE VALUE+INT
.BYTE ENDPRC
HROM
.BYTE PROC,<ROM,>ROM,1
.BYTE VALUE+INT
.BYTE ENDPRC
HSDEV
.BYTE PROC,<SETDEV,>SETDEV,1
.BYTE VALUE+INT
.BYTE ENDPRC
HDEV
.BYTE FUNC+REAL,<RETDEV,>RETDEV,0
.BYTE ENDFNC
HTRANS
.BYTE PROC,<SELMOD,>SELMOD,1
.BYTE VALUE+INT
.BYTE ENDPRC
HTRACK
.BYTE FUNC+REAL,<RETRCK,>RETRCK,0
.BYTE ENDFNC
HSECT
.BYTE FUNC+REAL,<RETSEC,>RETSEC,0
.BYTE ENDFNC
HFFAST
.BYTE FUNC+REAL,<FFAST,>FFAST,0
.BYTE ENDFNC
HFROM
.BYTE FUNC+REAL,<FCROM,>FCROM,0
.BYTE ENDFNC
HSOFF
.BYTE PROC,<PROFF,>PROFF,1
.BYTE VALUE+INT
.BYTE ENDPRC
HOFF
.BYTE FUNC+REAL,<FCOFF,>FCOFF,0
.BYTE ENDFNC
HRDERR
.BYTE FUNC+REAL,<EREAD,>EREAD,0
.BYTE ENDFNC
HBMOD
.BYTE FUNC+REAL,<FNMOD,>FNMOD,0
.BYTE ENDFNC
;
;--------------------------------;
; ;
; DRIVE ROUTINES ;
; ;
;--------------------------------;
;
DRIVES
OFFSET =DRIVES-DRMEM
;
JMP BREAD-OFFSET
JMP BWRITE-OFFSET
JMP RDFAST-OFFSET
JMP START-OFFSET
JMP DUMMY
JMP DUMMY
;
EXEC TAY
LDA TRACK
BEQ ILLEGL
CMP MAXTRK
BCS ILLEGL
STA COMTRK
JSR MAXSEC
CMP SECTOR
BEQ ILLEGL
BCS SECOK
ILLEGL LDA #$66+$80
.BYTE SKIP
CBMDOS LDA #$73+$80
.BYTE SKIP
NOTFND LDA #$62+$80
.BYTE SKIP
MISMAT LDA #$64+$80
REPORT PHA
LDA #TRUE
JSR TOCBM-OFFSET
PLA
BMI NORERR
LDX BUFNO
JMP REP1
NORERR AND #$7F
JMP REP2
SECOK LDA SECTOR
STA COMSEC
TYA
AND #$F0
CMP #WRITE
BNE FORMOK
TYA
LSR A
BCS FORMAT
LDA DOSFLG
BCC FORM
FORMAT LDA DOSTYP
FORM BEQ FORMOK
CMP DOSFRM
BNE CBMDOS
FORMOK STY SUBCM1
STY COMND
STY SUBCM2
WEXEC LDA COMND
BMI WEXEC
CMP #2
BCS REPORT
LDA #FALSE
JMP TOCBM-OFFSET
;
BLOCK STA TRACK
STX SECTOR
STY DRIVE
JSR LEDON
LDX #0
STX BUFNO
BCS WRTBL
LDA #READ
.BYTE SKIP
WRTBL LDA #WRITE
ORA DRIVE
JSR EXEC-OFFSET
SEI
LDA PLED
AND #255-LED
STA PLED
CLI
RTS
;
TOCBM STA TEMP
FIRST BIT PORT
BPL FIRST
SEI
LDA #REOI
STA PORT
SECOND BIT PORT
BMI SECOND
LDX #4
NEXT LDA #0
ASL TEMP
ROL A
ASL A
ASL TEMP
ROL A
ASL A
STA PORT
DEX
BNE NEXT
LDX #1
DEX
BNE WAIT
WAIT NOP
NOP
LDA #$0F
STA PORT
RTS
;
FRMCBM BIT PORT
BPL FRMCBM
SEI
LDA #REOI
STA PORT
SYNC BIT PORT
BMI SYNC
LDX #4
WT DEX
BNE WT
STX PORT
LDX #4
NXTBIT LDA PORT
LSR A
PHP
LSR A
LSR A
ROR TEMP
PLP
ROR TEMP
DEX
BNE NXTBIT
LDA #$0F
STA PORT
LDA TEMP
RTS
;
SEND LDY #0
SENDBY LDA BUFFER,Y
JSR TOCBM-OFFSET
INY
BNE SENDBY
CLI
RTS
;
SEARCH LDA DIR
LDX #1
NXTBLK LDY PARM3
CLC
JSR BLOCK-OFFSET
LDY #2
REPEAT LDA BUFFER,Y
AND #7
BEQ NXTNAM
INY
INY
INY
LDX #0
BEQ INSRCH
CNTEST LDA NAME-OFFSET,X
CONT CMP BUFFER,Y
BEQ NXTCHA
CMP #'?
BNE NXTNAM
LDA BUFFER,Y
CMP #SHSPC
BEQ NXTNAM
NXTCHA INX
INY
CPX NAMEND-OFFSET
BCS TESTND
INSRCH LDA NAME-OFFSET,X
CMP #'*
BEQ CLCPAR
BNE CONT
TESTND CPX #16
BCS CLCPAR
LDA BUFFER,Y
CMP #SHSPC
BEQ CLCPAR
NXTNAM TYA
AND #$E0
CLC
ADC #32+2
TAY
BCC REPEAT
LDX BUFFER+1
LDA BUFFER
BNE NXTBLK
JMP NOTFND-OFFSET
CLCPAR TYA
AND #$E0
TAY
LDA BUFFER+2,Y
LDX BUFFER+3,Y
PHA
LDA BUFFER+4,Y
TAY
PLA
RTS
;
RDFAST JSR SEARCH-OFFSET
AND #7
CMP #4
BEQ WRNGTP
STX PARM1
STY PARM2
LDY NAMEND-OFFSET
CMP NAME-OFFSET,Y
BEQ NOTWR
LDA NAME-OFFSET,Y
BNE WRNGTP
NOTWR LDA #255
JMP TOCBM-OFFSET
WRNGTP JMP MISMAT-OFFSET
;
NAMEND
NAME=NAMEND+1
;
.BYTE 0,' ',0
;
START LDA PARM1
LDX PARM2
RDYNOT LDY PARM3
CLC
JSR BLOCK-OFFSET
JSR FRMCBM-OFFSET
BNE CLOSED
JSR SEND-OFFSET
LDX BUFFER+1
LDA BUFFER
BNE RDYNOT
CLOSED RTS
;
PARM1=*-OFFSET
.BYTE 0
PARM2=*-OFFSET
.BYTE 0
DRNO
PARM3=*-OFFSET
.BYTE 0
;
ENDDR
;
BREAD LDA PARM1
LDX PARM2
LDY PARM3
CLC
JSR BLOCK-OFFSET
JMP SEND-OFFSET
;
BWRITE JSR RECEIV-OFFSET
LDA PARM1
LDX PARM2
LDY PARM3
SEC
JMP BLOCK-OFFSET
;
RECEIV LDY #0
NEXTBY JSR FRMCBM-OFFSET
STA BUFFER,Y
INY
BNE NEXTBY
CLI
RTS
;
ENDBLK
;
DRVS1
OFFST1 =DRVS1-DRMEM
;
JMP INTCOM-OFFST1
JMP READCD-OFFST1
JMP DESTR-OFFST1
JMP DUMMY
JMP DUMMY
JMP DUMMY
;
DESTR LDA DIR
STA COMTR2
LDA #0
STA COMSC2
LDA #EXPRG
ORA DRIVE
STA COMND2
WTDEST LDA COMND2
BMI WTDEST
JMP (RESET)
;
INTCOM JSR WRSYNC
LDA #1
STA COMND2
RTS
;
READCD LDA DIR
STA COMTRK
LDA #18
STA COMSEC
LDA #READ
ORA DRIVE
STA COMND
CONTRL LDA COMND
BMI CONTRL
CMP #2
BCS CONERR
RTS
CONERR LDX #0
JMP REP1
;
ENDR1
;
;--------------------------------;
; ;
; CBM ROUTINES ;
; ;
;--------------------------------;
;
BGET JSR BLTEST
LDA #4
JSR FNDPAR
LDY #0
LDA (COPY),Y
BEQ ILSTR
JSR TRPAR
LDX #'3
JSR CMD
JSR GET
LDA #4
JSR FNDPAR
LDY #2
LDA #1
STA (COPY),Y
INY
LDA #0
STA (COPY),Y
ADD COPY,4
LDY #0
TRBYT LDA UBUF,Y
STA (COPY),Y
INY
BNE TRBYT
LDA #TRUE
STA BUFED
RTS
ARGUM LDX #ARG
JMP RUNERR
;
ILSTR LDA #<STRING
LDX #>STRING
JMP FILE0
;
BPUT JSR BLTEST
LDA #4
JSR FNDPAR
LDY #2
LDA (COPY),Y
CMP #1
BNE ILSTR
INY
LDA (COPY),Y
BNE ILSTR
ADD COPY,4
LDY #0
TRSTR LDA (COPY),Y
STA UBUF,Y
INY
BNE TRSTR
JSR TRPAR
LDX #'4
JSR CMD
JMP PUT
;
SFST JSR FLAG
BNE SETFT
JSR FSTOPN
JSR DRPROT
JMP RESVEC
SETFT JMP VECTOR
;
ROM JSR SFST
JSR FLAG
BNE SETROM
LDA PAGE
AND #255-ROMMED
STA PAGE
RTS
SETROM LDA PAGE
ORA #ROMMED
STA PAGE
RTS
;
FLAG LDA #1
JSR FNDPAR
LDY #0
LDA (COPY),Y
INY
ORA (COPY),Y
RTS
;
FSTOPN LDA FAST
BNE FILOPN
RTS
FILOPN LDA #<ALOPN
LDX #>ALOPN
JMP FILE0
;
BLTEST LDA BLMODE
BEQ RNOVA
RTS
RNOVA LDA #<NOVAL
LDX #>NOVAL
JMP FILE0
;
DRPROT LDA BLMODE
BNE MEMPT
RTS
MEMPT LDA #<BLKMOD
LDX #>BLKMOD
JMP FILE0
;
IFBUF LDA BUFED
BEQ NOTUE
RTS
NOTUE LDA #<NOTBUF
LDX #>NOTBUF
JMP FILE0
;
SETDEV JSR FSTOPN
JSR DRPROT
LDA #1
JSR GETPAR
CMP #32
BCS ILD
DEVOK STA DEV
RTS
ILD LDX #ILDEV
JMP RUNERR
;
FCROM LDA PAGE
AND #ROMMED
LSR A
LSR A
LSR A
LSR A
TAX
BPL RBYTE
;
FNMOD LDX BLMODE
BPL RBYTE
;
RETDEV LDX DEV
BPL RBYTE
;
FFAST LDX INSTAL
BPL RBYTE
;
EREAD LDX WHERR
BPL RBYTE
;
RETRCK JSR IFBUF
LDX UBUF
BPL RBYTE
;
FCOFF LDX FLOFF
BPL RBYTE
;
RETSEC JSR IFBUF
LDX UBUF+1
RBYTE LDA #0
JMP PSHINT
;
PROFF JSR FLAG
BEQ SETOFF
LDA #TRUE
SETOFF STA FLOFF
RTS
;
SELMOD JSR TSTINS
JSR FSTOPN
JSR FLAG
BNE SETMUP
JSR PASSI
LDA #FALSE
STA BLMODE
STA BUFED
RTS
SETMUP JSR BTRANS
LDA #TRUE
STA BLMODE
LDA #FALSE
STA BUFED
RTS
;
TSTINS LDA INSTAL
BEQ NOTINP
RTS
NOTINP LDA #<NOTFST
LDX #>NOTFST
JMP FILE0
;
SIGNAL CPY #LINK
BNE NOLINK
LDA #TRUE
STA NOREST
LDA FA
CMP #4
BCS INVAL
LDA #INDEV
INVAL STA DEV
; JSR IFCOPY
LDA #FALSE
STA INSTAL
STA FAST
STA CHKING
STA FLOFF
STA WHERR
STA BLMODE
STA NOREST
LDA PAGE
ORA #ROMMED
STA PAGE
LDA #CPEN
STA PEN
STA DFFORG
LDA #CBORD
STA BORDER
STA DFBORD
STA ACBORD
LDA #CBACK
STA BACK
STA DFBACK
STA ACBACK
LDA #<RABMSG
LDX #>RABMSG
JSR TEXT
JMP VECTOR
NOLINK CPY #DSCRD
BNE CARD
LDA PAGE
AND #ROMMED
BNE COMAL
JSR TOPEN
JSR RESVEC
LDA #<KILL
LDX #>KILL
JMP TEXT
CARD CPY #BASIC
BNE COMAL
TOPEN LDA FAST
BEQ COMAL
JMP CLOSE
COMAL RTS
;
STRANS LDA #<DRIVES
LDY #>DRIVES
SOURCE STA FROM
STY FROM+1
RTS
;
BTRANS JSR STRANS
LDX #<ENDBLK
LDY #>ENDBLK
TRANS STX XSAVE
STY YSAVE
LDA #<DRMEM
LDY #>DRMEM
STA TO
STY TO+1
LDA #0
STA STATUS
NXTSET LDA DEV
JSR LISTEN
LDA #15+LCOM
JSR SLIST
LDA STATUS
BPL OK
LDX #DNP
JMP RUNERR
OK LDA #'M
JSR IECOUT
LDA #'-
JSR IECOUT
LDA #'W
JSR IECOUT
LDA TO
JSR IECOUT
LDA TO+1
JSR IECOUT
LDA #MAX
JSR IECOUT
LDY #0
NXTBYT LDA (FROM),Y
JSR IECOUT
INY
CPY #MAX
BCC NXTBYT
JSR UNLIST
ADD TO,MAX
ADD FROM,MAX
LDA FROM
SEC
SBC XSAVE
LDA FROM+1
SBC YSAVE
BCC NXTSET
RTS
;
TDRIVE STA SAVE
LDA #$0B
STA CPORT
SHAKE LDA CPORT
BPL SHAKE
LDA #$03
STA CPORT
LDX #4
NRED LDA #3
LSR SAVE
ROR A
LSR SAVE
ROR A
LSR A
LSR A
NOP
STA CPORT
DEX
BNE NRED
LDX #1
DEL DEX
BNE DEL
LDA #0
BEQ WTED
WTED RTS
;
FDRIVE LDA #$0B
STA CPORT
SH LDA CPORT
BPL SH
LDA #$03
STA CPORT
LDX #5
BEFORE DEX
NOP
BNE BEFORE
LDX #4
BNEXT LDA CPORT
ASL A
PHP
ASL A
ROL SAVE
PLP
ROL SAVE
DEX
BNE BNEXT
LDA #0
BEQ WATED
WATED LDA SAVE
EOR #$FF
RTS
;
CMD LDA #0
STA STATUS
LDA DEV
JSR LISTEN
LDA #15+LCOM
JSR SLIST
LDA STATUS
BPL CON
NOTPRS LDX #DNP
JMP RUNERR
CON LDA #'U
JSR IECOUT
TXA
JSR IECOUT
JMP UNLIST
;
PASSI LDA #0
STA STATUS
LDA DEV
JSR LISTEN
LDA #15+LCOM
JSR SLIST
LDA STATUS
BMI NOTPRS
LDA #'I
JSR IECOUT
JMP UNLIST
;
SETBL PHA
LDA DEV
JSR LISTEN
LDA #15+LCOM
JSR SLIST
LDA STATUS
BMI NOTPRS
STOK LDA #'M
JSR IECOUT
LDA #'-
JSR IECOUT
LDA #'W
JSR IECOUT
LDA #<PARM1
JSR IECOUT
LDA #>PARM1
JSR IECOUT
LDA #3
JSR IECOUT
PLA
JSR IECOUT
TXA
JSR IECOUT
TYA
JSR IECOUT
JMP UNLIST
;
PUT JSR DISA
LDY #0
NBYTE LDA UBUF,Y
JSR TDRIVE
INY
BNE NBYTE
JSR FDRIVE
BNE PUTERR
JMP ENA
;
GET JSR DISA
JSR FDRIVE
BEQ GTBLCK
PUTERR JSR ENA
JMP CSTAT
GTBLCK LDY #0
NXTBT JSR FDRIVE
STA UBUF,Y
INY
BNE NXTBT
JMP ENA
;
DISA SEI
LDA VICON
AND #255-HIDE
STA VICON
LDA CPORT
STA PTSAVE
LDA SPCON
STA SPRITE
LDA #0
STA SPCON
LDY #2
RASTER LDA RWRAST
CMP #160
BNE RASTER
SAMLIN CMP RWRAST
BEQ SAMLIN
DEY
BNE RASTER
RTS
;
ENA LDA PTSAVE
STA CPORT
LDA SPRITE
STA SPCON
LDA VICON
ORA #HIDE
STA VICON
CLI
RTS
;
GETPAR JSR FNDPAR
LDY #0
LDA (COPY),Y
BNE OVRFLW
INY
LDA (COPY),Y
RTS
;
TRPAR LDA #3
JSR GETPAR
CMP #2
BCS OVRFLW
STA YSAVE
LDA #2
JSR GETPAR
STA XSAVE
LDA #1
JSR GETPAR
LDX XSAVE
LDY YSAVE
JMP SETBL
OVRFLW LDX #ARG
JMP RUNERR
;
TEXT STA COPY
STX COPY+1
LDY #0
CHARA LDA (COPY),Y
BEQ STOPIT
JSR CWRT
INY
BNE CHARA
STOPIT RTS
;
VECTOR LDA INSTAL
BNE ISIN
LDX #11
TRVEC LDA IOPEN,X
STA OLDOPN,X
DEX
BPL TRVEC
LDA #<OPEN
LDY #>OPEN
STA IOPEN
STY IOPEN+1
LDA #<CLOSE
LDY #>CLOSE
STA ICLOSE
STY ICLOSE+1
LDA #<CHKFST
LDY #>CHKFST
STA ICHKIN
STY ICHKIN+1
LDA #<CHFOUT
LDY #>CHFOUT
STA ICKOUT
STY ICKOUT+1
LDA #<CLR
LDY #>CLR
STA ICLRCH
STY ICLRCH+1
LDA #<GETIN
LDY #>GETIN
STA IBASIN
STY IBASIN+1
LDA TRAPVC
LDY TRAPVC+1
STA OLDTRP
STY OLDTRP+1
LDA #<HANDLE
LDY #>HANDLE
STA TRAPVC
STY TRAPVC+1
LDA #TRUE
STA INSTAL
ISIN RTS
;
RESVEC LDA INSTAL
BEQ ISRES
LDX #11
RESNXT LDA OLDOPN,X
STA IOPEN,X
DEX
BPL RESNXT
LDA OLDTRP
LDY OLDTRP+1
STA TRAPVC
STY TRAPVC+1
LDA #FALSE
STA INSTAL
ISRES RTS
;
PARSE LDY #FALSE
STY TYPE
STY MODE
STY NAMEND
LDA (FNADR),Y
AND #1
STA DRNO
CNFND CPY FNLEN
BCC SETRUE
RTS
SETRUE LDA (FNADR),Y
CMP #':
BEQ CFND
CMP #'$
BNE NOCAT
RTS
NOCAT INY
BNE CNFND
CFND LDX #0
NEON INY
CPY FNLEN
BCS OUT
LDA (FNADR),Y
CMP #',
BEQ FCOM
CPX #16
BCS NEON
STA NAME,X
INX
INC NAMEND
BNE NEON
FCOM INY
CPY FNLEN
BCS OUT
LDA (FNADR),Y
STA TYPE
SNFND INY
CPY FNLEN
BCS OUT
LDA (FNADR),Y
CMP #',
BNE SNFND
INY
CPY FNLEN
BCS OUT
LDA (FNADR),Y
STA MODE
OUT LDA MODE
BNE NOTSPL
LDA TYPE
STA MODE
LDA #0
STA TYPE
CLC
NOTSPL RTS
;
ALLOFF LDA FLOFF
BNE YETST
RTS
YETST LDX #15
NDEV LDY #0
STY STATUS
CPX DEV
BEQ DECR
TXA
JSR LISTEN
; LDA #15+LCOM
; JSR SLIST
JSR UNLIST
LDA STATUS
BPL OFF
DECR DEX
CPX #4
BCS NDEV
RTS
OFF LDA #<TURN
LDX #>TURN
JMP FILE0
;
OPEN LDX FA
CPX DEV
BEQ NOTNOR
NORMAL JMP (OLDOPN)
NOTNOR LDX LA
JSR FINDFI
BNE NOTOPN
JMP IO2
NOTOPN LDA FAST
BEQ POSI
LDA #<ALOPN
LDX #>ALOPN
JMP FILELA
POSI LDA BLMODE
BEQ BLPOS
LDA #<BLKMOD
LDX #>BLKMOD
JMP FILELA
BLPOS LDA SA
AND #$1F
CMP #15
BCS NORMAL
LDA LA
BEQ NORMAL
JSR PARSE
BCS NORMAL
LDA MODE
BEQ MREAD
CMP #'R
BNE NORMAL
MREAD LDA TYPE
CMP #'L
BEQ NORMAL
LDX LDTND
BEQ COMPL
CONTE DEX
BEQ COMPL
LDA FAT,X
CMP DEV
BNE CONTE
LDA #<NORFIL
LDX #>NORFIL
JMP FILELA
COMPL LDX LDTND
; LDA MODET,X
; AND #$08
; BNE DPLUS
; LDX #ILLO
; JMP RUNERR
DPLUS INC LDTND
LDA LA
STA LAT,X
LDA SA
ORA #LCOM
STA SA
STA SAT,X
LDA FA
STA FAT,X
LDA TYPE
LDY #3
SETYP CMP SPU-1,Y
BEQ TYFND
DEY
BNE SETYP
TYFND TYA
LDY NAMEND
STA NAME,Y
JSR ALLOFF
JSR PASSI
JSR STRANS
LDX #<ENDDR
LDY #>ENDDR
JSR TRANS
LDX #'5
JSR CMD
JSR DISA
NXTDIR JSR FDRIVE
BEQ NXTDIR
CMP #255
BNE NOPEN
LDA LA
STA FAST
LDA #FALSE
STA CHKING
STA WHERR
NOPEN JSR ENA
CLC
RTS
;
CHKFST STY YSAVE
TXA
BEQ TESPOS
CPX FAST
BEQ SETFST
NRCHK JMP (OLDCHK)
TESPOS LDA CHKING
BEQ NRCHK
LDA #<ALOPN
LDX #>ALOPN
JMP FILE0
SETFST JSR FINDFI
BEQ CHOK
JMP IO3
CHOK JSR SFIPAR
LDA FA
STA DFLTN
LDA CHKING
BNE ALREAD
LDX #'6
JSR CMD
JSR DISA
JSR FDRIVE
BNE CHERR
LDA #FALSE
JSR TDRIVE
JSR GTBLCK
LDA #2
STA CHARD
LDA #TRUE
STA CHKING
ALREAD LDA WHERR
BEQ NOTWHR
LDA #FALSE
STA CHKING
STA WHERR
JMP CSTAT
NOTWHR LDY YSAVE
CLC
RTS
CHERR JSR ENA
JMP CSTAT
;
GETIN STX XSAVE
STY YSAVE
LDA DFLTN
CMP DEV
BEQ GETFST
NORBIN JMP (OLDBAS)
GETFST LDA FAST
BEQ NORBIN
LDA CHKING
BEQ NORBIN
LDA STATUS
BEQ NOCR
JMP RETCR
NOCR LDX CHARD
LDA UBUF,X
PHA
INC CHARD
LDA UBUF
BNE TSTBLK
CPX UBUF+1
BCC ENDGET
LDA #EOF
STA STATUS
ENDGET PLA
LDX XSAVE
LDY YSAVE
CLC
RTS
TSTBLK INX
BNE ENDGET
JSR DISA
JSR FDRIVE
BNE GETERR
LDA #FALSE
JSR TDRIVE
JSR GTBLCK
LDA #2
STA CHARD
BNE ENDGET
GETERR JSR ENA
LDA #EOF
STA STATUS
LDA #TRUE
STA WHERR
BNE ENDGET
;
CLOSE TAX
BEQ OCLOS
CMP FAST
BEQ FSTCLS
OCLOS JMP (OLDCLS)
FSTCLS JSR FINDFI
BNE FILFN
JSR SFIPAR
JSR DELPAR
LDA CHKING
BEQ CLINIT
LDA WHERR
BNE CLINIT
LDA UBUF
BEQ CLINIT
JSR DISA
JSR FDRIVE
BNE DISCLS
LDA #TRUE
JSR TDRIVE
DISCLS JSR ENA
CLINIT LDA #FALSE
STA CHKING
STA FAST
LDA WHERR
BNE FILFN
JSR PASSI
FILFN CLC
RTS
;
CLR LDX DFLTN
CPX DEV
BEQ POSFA
OCLR JMP (OLDCLR)
POSFA LDA FAST
BEQ OCLR
LDX #3
STX DFLTO
LDA #0
STA DFLTN
RTS
;
CHFOUT CPX #0
BEQ TESTCH
NOROUT JMP (OLDOUT)
TESTCH JSR FSTOPN
JSR DRPROT
JMP NOROUT
;
HANDLE CPY #0
BEQ TRPOLD
CPY FAST
BNE WHTEST
PHA
STX XSAVE
STY YSAVE
TYA
JSR CLOSE
LDX XSAVE
LDY YSAVE
OHAND PLA
TRPOLD JMP (OLDTRP)
WHTEST PHA
LDA WHERR
BEQ OHAND
JSR PASSI
LDA #FALSE
STA WHERR
BEQ OHAND
;
FILELA LDY LA
.BYTE SKIP
FILE0 LDY #0
SETERR STA COPY
STX COPY+1
STY YSAVE
LDY #0
TRERR LDA (COPY),Y
BEQ SETLEN
STA ERTEXT,Y
INY
BNE TRERR
SETLEN STY ERTLEN
LDA #INJUMP
STA Q1
LDA #<TRAPVC
STA Q1+1
LDA #>TRAPVC
STA Q1+2
INY
LDA (COPY),Y
TAX
INY
LDA (COPY),Y
LDY YSAVE
JSR GOTO
.BYTE PAGEB,<Q1,>Q1
;
IFCOPY LDA #<DRVS1
LDY #>DRVS1
JSR SOURCE
LDX #<ENDR1
LDY #>ENDR1
JSR TRANS
LDX #'4
JSR CMD
LDA DEV
JSR TALK
LDA #15+LCOM
JSR TKSA
JSR IECIN
ASL A
ASL A
ASL A
ASL A
STA XSAVE
JSR IECIN
AND #$0F
ORA XSAVE
TAX
CLRBUF JSR IECIN
CMP #CR
BNE CLRBUF
JSR UNTALK
CPX #$23
BEQ NOTILL
LDX #'5
JSR CMD
LDA #<ILCOPY
LDX #>ILCOPY
JSR TEXT
LDA #<PAGE
LDY #>PAGE
STA FROM
STY FROM+1
LDY #0
NXTDES STA (FROM),Y
INY
BNE NDPINC
INC FROM+1
NDPINC CPY #<NXTDES
BCC NXTDES
LDX FROM+1
CPX #>NXTDES
BCC NXTDES
HANG JMP HANG
NOTILL JMP PASSI
;
.LIB RABMSG
;
TURN
.BYTE 'UNUSED DEVICE ON'
.BYTE 0,<300,>300
ALOPN
.BYTE 'FASTFILE OPEN'
.BYTE 0,<301,>301
NORFIL
.BYTE 'DISKFILE OPEN'
.BYTE 0,<302,>302
STRING
.BYTE 'INVALID BUFFER STRING'
.BYTE 0,<303,>303
BLKMOD
.BYTE 'DISKMEMORY PROTECTED'
.BYTE 0,<304,>304
NOVAL
.BYTE 'NOT IN BLOCK MODE'
.BYTE 0,<305,>305
NOTFST
.BYTE 'NOT IN FAST MODE'
.BYTE 0,<306,>306
NOTBUF
.BYTE 'NO BLOCK READ'
.BYTE 0,<307,>307
ILCOPY
.BYTE CLRPAG,CR,' THIS IS AN'
.BYTE ' ILLEGAL COPY',0
KILL
.BYTE 'DISKRABBIT IS DISABLED'
.BYTE ' NOW',CR,CR,0
SPU
.BYTE 'SPU'
;
END .END